package com.yxjx.duoxue.utils;

import java.io.IOException;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.DeserializationConfig.Feature;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

/**
 * 一些json与对象转换的工具集合类
 * 
 * 
 */
public class JsonUtils {

    private static final ObjectMapper objectMapper = new ObjectMapper();
    static {
    	objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    private JsonUtils(){}
    public static ObjectMapper getInstance() {  
		return objectMapper;
    }  

    /**
     * 使用Jackson 数据绑定 将对象转换为 json字符串
     * 
     * 还可以 直接使用 JsonUtils.getInstance().writeValueAsString(Object obj)方式 
     * @param obj
     * @return
     */
    public static String toJsonString(Object obj) {
        try {
            return objectMapper.writeValueAsString(obj);
        } catch (JsonGenerationException e) {
            Utils.logd("转换为json字符串失败" + e.toString());
        } catch (JsonMappingException e) {
            Utils.logd("转换为json字符串失败" + e.toString());
        } catch (IOException e) {
            Utils.logd("转换为json字符串失败" + e.toString());
        }
        return null;
    }

    /**
     * json字符串转化为 JavaBean
     * 
     * 还可以直接JsonUtils.getInstance().readValue(String content,Class valueType)用这种方式
     * @param <T>
     * @param content
     * @param valueType
     * @return
     */
    public static <T> T toJavaBean(String content, Class<T> valueType) {
        try {
            return objectMapper.readValue(content, valueType);
        } catch (JsonParseException e) {
            Utils.logd("json字符串转化为 javabean失败" + e.toString());
        } catch (JsonMappingException e) {
            Utils.logd("json字符串转化为 javabean失败" + e.toString());
        } catch (IOException e) {
            Utils.logd("json字符串转化为 javabean失败" + e.toString());
        }
        return null;
    }

    /**
     * json字符串转化为list
     * 
     * 还可以 直接使用  JsonUtils.getInstance().readValue(String content, new TypeReference<List<T>>(){})方式
     * @param <T>
     * @param content
     * @param valueType
     * @return
     * @throws IOException 
     */
    public static <T> List<T> toJavaBeanList(String content, TypeReference<List<T>>  typeReference) throws IOException {
        try {
            return objectMapper.readValue(content, typeReference);
        } catch (JsonParseException e) {
            Utils.logd("json字符串转化为 list失败,原因:" + e.toString());
        } catch (JsonMappingException e) {
            Utils.logd("json字符串转化为 list失败,原因" + e.toString());
        } catch (IOException e) {
            Utils.logd("json字符串转化为 list失败,原因" + e.toString());
        }
        return null;
    }

}